﻿using Little.Soldier.SWIFT;
using Little.Soldier.SWIFT.Definition;
using System.ComponentModel;

namespace Little.Soldier.SWIFT.Messages.Category0
{
  public class MT073 : SwiftMessage
  {
    private static SwiftMessageDefinition MessageDefinition;
    private static SwiftTagChoiceDefinition U0002;
    private static SwiftTagSequenceDefinition U0003;
    private static SwiftTagDefinition U0004;
    private static SwiftTagSubItemDefinition U0005;
    private static SwiftTagSequenceDefinition U0006;
    private static SwiftTagDefinition U0007;
    private static SwiftTagSubItemDefinition U0008;
    private static SwiftTagDefinition U000E;
    private static SwiftTagSubItemDefinition U000F;
    private static SwiftTagDefinition U0010;
    private static SwiftTagSubItemDefinition U0011;
    private static SwiftTagSequenceDefinition U0012;
    private static SwiftTagDefinition U0013;
    private static SwiftTagSubItemDefinition U0014;
    private static SwiftTagDefinition U0015;
    private static SwiftTagSubItemDefinition U0016;
    private static SwiftTagDefinition U0017;
    private static SwiftTagSubItemDefinition U0018;
    private static SwiftTagSequenceDefinition U0019;
    private static SwiftTagDefinition U001A;
    private static SwiftTagSubItemDefinition U001B;
    private static SwiftTagDefinition U001C;
    private static SwiftTagSubItemDefinition U001D;
    private static SwiftTagDefinition U001E;
    private static SwiftTagSubItemDefinition U001F;

    [Description("Field Group 1")]
    public MT073.FieldGroup1Class FieldGroup1
    {
      get
      {
        return new MT073.FieldGroup1Class((SwiftElement) this, 0, false);
      }
    }

    [Description("Field Group 2")]
    public MT073.FieldGroup2Class FieldGroup2
    {
      get
      {
        return new MT073.FieldGroup2Class((SwiftElement) this, 0, false);
      }
    }

    [Description("Field Group 3")]
    public MT073.FieldGroup3Class FieldGroup3
    {
      get
      {
        return new MT073.FieldGroup3Class((SwiftElement) this, 0, false);
      }
    }

    [Description("Field Group 4")]
    public MT073.FieldGroup4Class FieldGroup4
    {
      get
      {
        return new MT073.FieldGroup4Class((SwiftElement) this, 0, false);
      }
    }

    public MT073()
      : base(true)
    {
    }

    public MT073(SwiftMessage message)
      : base(message)
    {
    }

    internal override SwiftMessageDefinition MsgDefinition()
    {
      return MT073.MessageDefinition;
    }

    protected override void InitSwiftMessageDefinition()
    {
      MT073.MessageDefinition = new SwiftMessageDefinition("MT073", "Message Sample Request");
      MT073.U0002 = new SwiftTagChoiceDefinition("Choice", "");
      MT073.U0002.Multiple = true;
      MT073.U0003 = new SwiftTagSequenceDefinition("FieldGroup1", "Field Group 1");
      MT073.U0004 = new SwiftTagDefinition("MessageIdentifier_120", "Message Identifier");
      MT073.U0004.TagName = "{120:";
      MT073.U0005 = new SwiftTagSubItemDefinition("MessageIdentifier", "Identifies a specific message in a tank file as specified in");
      MT073.U0004.Elements.Add((SwiftDefinitionElement) MT073.U0005);
      MT073.U0003.Elements.Add((SwiftDefinitionElement) MT073.U0004);
      MT073.U0002.Elements.Add((SwiftDefinitionElement) MT073.U0003);
      MT073.U0006 = new SwiftTagSequenceDefinition("FieldGroup2", "Field Group 2");
      MT073.U0007 = new SwiftTagDefinition("MessageList_123", "Message List");
      MT073.U0007.TagName = "{123:";
      MT073.U0008 = new SwiftTagSubItemDefinition("MessageList", "Whole tank file");
      MT073.U0007.Elements.Add((SwiftDefinitionElement) MT073.U0008);
      MT073.U0006.Elements.Add((SwiftDefinitionElement) MT073.U0007);
      MT073.U000E = new SwiftTagDefinition("RandomNumberSeed_126", "Random Number Seed");
      MT073.U000E.TagName = "{126:";
      MT073.U000F = new SwiftTagSubItemDefinition("RandomNumberSeed", "Identifies a set of test messages. It contains a seed");
      MT073.U000E.Elements.Add((SwiftDefinitionElement) MT073.U000F);
      MT073.U0006.Elements.Add((SwiftDefinitionElement) MT073.U000E);
      MT073.U0010 = new SwiftTagDefinition("NumberOfMessages_122", "Number of messages");
      MT073.U0010.TagName = "{122:";
      MT073.U0011 = new SwiftTagSubItemDefinition("NumberOfMessages", "Number of messages");
      MT073.U0010.Elements.Add((SwiftDefinitionElement) MT073.U0011);
      MT073.U0006.Elements.Add((SwiftDefinitionElement) MT073.U0010);
      MT073.U0002.Elements.Add((SwiftDefinitionElement) MT073.U0006);
      MT073.U0012 = new SwiftTagSequenceDefinition("FieldGroup3", "Field Group 3");
      MT073.U0013 = new SwiftTagDefinition("MessageType_124", "Message Type");
      MT073.U0013.TagName = "{124:";
      MT073.U0014 = new SwiftTagSubItemDefinition("MessageType", "A valid FIN user-to-user Message Type.");
      MT073.U0013.Elements.Add((SwiftDefinitionElement) MT073.U0014);
      MT073.U0012.Elements.Add((SwiftDefinitionElement) MT073.U0013);
      MT073.U0015 = new SwiftTagDefinition("RandomNumberSeed_126", "Random Number Seed");
      MT073.U0015.TagName = "{126:";
      MT073.U0016 = new SwiftTagSubItemDefinition("RandomNumberSeed", "Identifies a set of test messages. It contains a seed");
      MT073.U0015.Elements.Add((SwiftDefinitionElement) MT073.U0016);
      MT073.U0012.Elements.Add((SwiftDefinitionElement) MT073.U0015);
      MT073.U0017 = new SwiftTagDefinition("NumberOfMessages_122", "Number of messages");
      MT073.U0017.TagName = "{122:";
      MT073.U0018 = new SwiftTagSubItemDefinition("NumberOfMessages", "Number of messages");
      MT073.U0017.Elements.Add((SwiftDefinitionElement) MT073.U0018);
      MT073.U0012.Elements.Add((SwiftDefinitionElement) MT073.U0017);
      MT073.U0002.Elements.Add((SwiftDefinitionElement) MT073.U0012);
      MT073.U0019 = new SwiftTagSequenceDefinition("FieldGroup4", "Field Group 4");
      MT073.U001A = new SwiftTagDefinition("MessageCategory_125", "Message Category");
      MT073.U001A.TagName = "{125:";
      MT073.U001B = new SwiftTagSubItemDefinition("MessageCategory", "");
      MT073.U001A.Elements.Add((SwiftDefinitionElement) MT073.U001B);
      MT073.U0019.Elements.Add((SwiftDefinitionElement) MT073.U001A);
      MT073.U001C = new SwiftTagDefinition("RandomNumberSeed_126", "Random Number Seed");
      MT073.U001C.TagName = "{126:";
      MT073.U001D = new SwiftTagSubItemDefinition("RandomNumberSeed", "Identifies a set of test messages. It contains a seed");
      MT073.U001C.Elements.Add((SwiftDefinitionElement) MT073.U001D);
      MT073.U0019.Elements.Add((SwiftDefinitionElement) MT073.U001C);
      MT073.U001E = new SwiftTagDefinition("NumberOfMessages_122", "Number of messages");
      MT073.U001E.TagName = "{122:";
      MT073.U001F = new SwiftTagSubItemDefinition("NumberOfMessages", "Number of messages");
      MT073.U001E.Elements.Add((SwiftDefinitionElement) MT073.U001F);
      MT073.U0019.Elements.Add((SwiftDefinitionElement) MT073.U001E);
      MT073.U0002.Elements.Add((SwiftDefinitionElement) MT073.U0019);
      MT073.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT073.U0002);
    }

    public class FieldGroup1Class : SwiftTagSequence
    {
      internal override SwiftDefinitionElement Definition
      {
        get
        {
          return (SwiftDefinitionElement) MT073.U0003;
        }
      }

      [Description("Message Identifier")]
      public Tag120 MessageIdentifier_120
      {
        get
        {
          return new Tag120((SwiftElement) this, 0, (SwiftDefinitionElement) MT073.U0004);
        }
      }

      [Description("Message Identifier")]
      public Tag120 Tag120_MessageIdentifier
      {
        get
        {
          return this.MessageIdentifier_120;
        }
      }

      internal FieldGroup1Class(SwiftElement parent, int index, bool createTags)
        : base(parent, index, createTags)
      {
      }
    }

    public class FieldGroup2Class : SwiftTagSequence
    {
      internal override SwiftDefinitionElement Definition
      {
        get
        {
          return (SwiftDefinitionElement) MT073.U0006;
        }
      }

      [Description("Message List")]
      public Tag123 MessageList_123
      {
        get
        {
          return new Tag123((SwiftElement) this, 0, (SwiftDefinitionElement) MT073.U0007);
        }
      }

      [Description("Message List")]
      public Tag123 Tag123_MessageList
      {
        get
        {
          return this.MessageList_123;
        }
      }

      [Description("Random Number Seed")]
      public Tag126 RandomNumberSeed_126
      {
        get
        {
          return new Tag126((SwiftElement) this, 0, (SwiftDefinitionElement) MT073.U000E);
        }
      }

      [Description("Random Number Seed")]
      public Tag126 Tag126_RandomNumberSeed
      {
        get
        {
          return this.RandomNumberSeed_126;
        }
      }

      [Description("Number of messages")]
      public Tag122 NumberOfMessages_122
      {
        get
        {
          return new Tag122((SwiftElement) this, 0, (SwiftDefinitionElement) MT073.U0010);
        }
      }

      [Description("Number of messages")]
      public Tag122 Tag122_NumberOfMessages
      {
        get
        {
          return this.NumberOfMessages_122;
        }
      }

      internal FieldGroup2Class(SwiftElement parent, int index, bool createTags)
        : base(parent, index, createTags)
      {
      }
    }

    public class FieldGroup3Class : SwiftTagSequence
    {
      internal override SwiftDefinitionElement Definition
      {
        get
        {
          return (SwiftDefinitionElement) MT073.U0012;
        }
      }

      [Description("Message Type")]
      public Tag124 MessageType_124
      {
        get
        {
          return new Tag124((SwiftElement) this, 0, (SwiftDefinitionElement) MT073.U0013);
        }
      }

      [Description("Message Type")]
      public Tag124 Tag124_MessageType
      {
        get
        {
          return this.MessageType_124;
        }
      }

      [Description("Random Number Seed")]
      public Tag126 RandomNumberSeed_126
      {
        get
        {
          return new Tag126((SwiftElement) this, 0, (SwiftDefinitionElement) MT073.U0015);
        }
      }

      [Description("Random Number Seed")]
      public Tag126 Tag126_RandomNumberSeed
      {
        get
        {
          return this.RandomNumberSeed_126;
        }
      }

      [Description("Number of messages")]
      public Tag122 NumberOfMessages_122
      {
        get
        {
          return new Tag122((SwiftElement) this, 0, (SwiftDefinitionElement) MT073.U0017);
        }
      }

      [Description("Number of messages")]
      public Tag122 Tag122_NumberOfMessages
      {
        get
        {
          return this.NumberOfMessages_122;
        }
      }

      internal FieldGroup3Class(SwiftElement parent, int index, bool createTags)
        : base(parent, index, createTags)
      {
      }
    }

    public class FieldGroup4Class : SwiftTagSequence
    {
      internal override SwiftDefinitionElement Definition
      {
        get
        {
          return (SwiftDefinitionElement) MT073.U0019;
        }
      }

      [Description("Message Category")]
      public Tag125 MessageCategory_125
      {
        get
        {
          return new Tag125((SwiftElement) this, 0, (SwiftDefinitionElement) MT073.U001A);
        }
      }

      [Description("Message Category")]
      public Tag125 Tag125_MessageCategory
      {
        get
        {
          return this.MessageCategory_125;
        }
      }

      [Description("Random Number Seed")]
      public Tag126 RandomNumberSeed_126
      {
        get
        {
          return new Tag126((SwiftElement) this, 0, (SwiftDefinitionElement) MT073.U001C);
        }
      }

      [Description("Random Number Seed")]
      public Tag126 Tag126_RandomNumberSeed
      {
        get
        {
          return this.RandomNumberSeed_126;
        }
      }

      [Description("Number of messages")]
      public Tag122 NumberOfMessages_122
      {
        get
        {
          return new Tag122((SwiftElement) this, 0, (SwiftDefinitionElement) MT073.U001E);
        }
      }

      [Description("Number of messages")]
      public Tag122 Tag122_NumberOfMessages
      {
        get
        {
          return this.NumberOfMessages_122;
        }
      }

      internal FieldGroup4Class(SwiftElement parent, int index, bool createTags)
        : base(parent, index, createTags)
      {
      }
    }
  }
}
